package com.lyx.shirotest;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.realm.AuthenticatingRealm;
import org.apache.shiro.util.ByteSource;

/**
 * @author LiuYunXin
 * @create 2022-12-24-23:36
 */
public class MyRealm extends AuthenticatingRealm {
    /*
     * 自定义登录认证方法，shiro的login方法底层会调用该类的认证方法进行认证
     * 需要配置自定义的realm生效，在ini文件中配置，在springboot框架中进行配置
     * 该方法指示获取进行对比的信息，认证逻辑还是按照shiro底层逻辑完成
     */


    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        //1获取身份信息
        String principal = token.getPrincipal().toString();
        //2获取凭证信息
        String password = new String((char[])token.getCredentials());
        System.out.println("认证用户信息:"+principal+",password:"+password);
        //3获取数据库中用户存储信息
        if(principal.equals("zhangsan")){
            //3.1数据库中存储的加盐三次迭代密码
            String pwdInfo = "7174f64b13022acd3c56e2781e098a5f";
            //4创建封装校验逻辑的对象，封装数据返回
            AuthenticationInfo info = new SimpleAuthenticationInfo(
                    token.getPrincipal(),
                    pwdInfo,
                    ByteSource.Util.bytes("salt"),
                    token.getPrincipal().toString()
            );
            return info;
        }

        return null;
    }
}
